package config

import (
	"flag"
	"fmt"

	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

const (
	//defaultEnv        = "dev" //dev test prod
	defaultConfigName = "multitude-cloud.yaml"
	//defaultConfigName = "config.yaml"
	defaultConfigPath = "./"
)

var (
	//defaultConfigPath, _ = os.Getwd()
	// 命令行参数
	Env          = flag.String("config.env", DEV, "Config Env.")
	confPath     = flag.String("config.path", defaultConfigPath, "Config Path.")
	confName     = flag.String("config.name", defaultConfigName, "default name 'multitude-cloud.yaml'")
	DefaultViper = viper.New()
)

func Init() {
	DefaultViper.SetConfigName(defaultConfigName)
	if len(*confName) > 0 && confName != nil {
		DefaultViper.SetConfigName(*confName)
	}
	DefaultViper.AddConfigPath(*confPath)
	DefaultViper.AddConfigPath(defaultConfigPath) // 还可以在工作目录中查找配置
	//DefaultConfig.SetConfigType("toml")
	DefaultViper.SetConfigType("yaml")

	// DefaultConfig.SetConfigName("config")
	err := DefaultViper.ReadInConfig() // 查找并读取配置文件
	if err != nil {                    // 处理读取配置文件的错误
		panic(fmt.Errorf("Fatal error config file: %s \n", err))
	}

	DefaultViper.WatchConfig()
	DefaultViper.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println("config file changed:", e.Name)
		if err := DefaultViper.Unmarshal(&C); err != nil {
			fmt.Println(err)
		}
	})

	if err := DefaultViper.Unmarshal(&C); err != nil {
		fmt.Println(err)
	}
	// fmt.Println("读取配置成功")
}

//func GetConfig() *viper.Viper {
//	return DefaultConfig
//}
//
//func GetString(key string) string {
//	return DefaultConfig.GetString(key)
//}
//
//func GetStringSlice(key string) []string {
//	return DefaultConfig.GetStringSlice(key)
//}
//
//func GetStringMap(key string) map[string]interface{} {
//	return DefaultConfig.GetStringMap(key)
//}
